package com.gem.day11;

import java.util.List;

import com.google.common.collect.Lists;

/**
 * 本类用来演示Java 8.0新特性--StreamAPI
 * 结合Lambda表达式实现强大的流式操作
 * 
 * @author easonsy
 * 2020年7月30日 下午3:59:46
 */
public class StreamAPI {
	public static void main(String[] args) {
		Person p1 = new Person("jack", 25, "美国", 'M');
		Person p2 = new Person("rose", 22, "美国", 'F');
		Person p3 = new Person("tom", 21, "美国", 'M');
		Person p4 = new Person("LiLei", 26, "中国", 'M');
		Person p5 = new Person("HanMeimei", 29, "中国", 'F');
		Person p6 = new Person("jack", 25, "美国", 'M');

		//JDK9.0提供
		//注意:此方式获取的是一个不变集合类,所以无法进行增删操作
		//List<Person> persons = List.of(p1, p2, p3, p4, p5);
		// java.lang.UnsupportedOperationException
		//persons.add(p6);

		//使用guava
		List<Person> persons = Lists.newArrayList(p1, p2, p3, p4, p5, p6);

		//打印年龄大于25岁的人
		/*for (int i = 0; i < persons.size(); i++) {
			if (persons.get(i).getAge() > 25) {
				System.out.println(persons.get(i));
			}
		}*/
		persons.stream().filter((p) -> p.getAge() > 25).forEach(System.out::println);

		//filter过滤
		//查询出中国人的数量
		System.out.println(persons.stream().filter((p) -> p.getContry().equals("中国")).count());

		//limit,切片(分页)
		//查询两个男生
		persons.stream().filter((p) -> p.getSex() == 'M').limit(2).forEach(System.out::println);

		System.out.println(">>>>>>>>>>>>>>");

		//skip,跳过
		//查询第三个男生开始
		persons.stream().filter((p) -> p.getSex() == 'M').skip(2).forEach(System.out::println);

		System.out.println(">>>>>>>>>>>>>>");

		//distinct排重
		persons.stream().distinct().forEach(System.out::println);

		System.out.println(">>>>>>>>>>>>>>");

		System.out.println(persons.stream().allMatch((p) -> p.getAge() > 18));

		System.out.println(">>>>>>>>>>>>>>");

		//统计所有人的年龄总和
		System.out.println(persons.stream().map(Person::getAge).reduce(Integer::sum).get());
	}
}
